開發者常常認為,當我們程式寫完的那一刻,所有事就結束了,但現實則是常常把我們臉打腫。明明已經開發完本機測試過的程式,怎麼換個環境又不能動了。為什麼 bug 總是發生在部署到 production 環境時才發現?這些種種的問題,常常歸咎於開發環境跟部署環境不一致所產生。在以前通常 MIS 安裝完機器後,都會備份一份當下狀態的 image,當真正要上線移機到客戶環境時,對方只要提供一個乾淨的電腦環境,就可以透過 image 快速的建置好準上線環境,但這一切都是為了 production,我們的開發環境怎麼辦?
例如甲專案使用的是 MySQL 5.7,因為乙專案專案比較晚開發,當時 MySQL 8.0 已經出來了,乙專案自然就選用了當下最新的穩定版本。但身為開發者的我們,只有一台電腦,但不會只參與一個專案或產品,在開發新專案的同時,也許你還要偶而修修舊專案的 bug,不可能會有人為了這微小的差距,將本機的 MySQL 降版,在這裡我們只是簡化了問題,因為實際的情況兩個專案的環境差異性更大,而這個問題也是頻繁的發生。
但在 Docker 來臨後,你只需要一行指令就可以切換環境了。
docker run --name demo-db -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
docker run --name demo-db -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0
Docker Hub:它是 Docker 提供的一種服務,你可以在
Docker Hub
上尋找別人發佈的 image,也可以發布自己的 image,主要的功能是可以pull
和push
容器的 images,並且可以跟你常用的Github
或Bitbucket
整合。
而且如果你只是想試試看整合某個服務,你只要在 Docker Hub 用關鍵字搜尋相關的 image,花不了你幾分鐘的時間,馬上就有一個可以正常執行的測試環境。當你測試結束後,docker container 的隔絕特性,讓你可以很簡單的刪除測試環境,並且不會污染到本機環境。
PS. 因為仿間已經有非常多優秀的 Docker 書籍和工具書,例如 Docker 入門與實戰,所以我會以概念性的方式來介紹 Docker 能幫我們解決哪些煩惱,而不是手把手的去列出那些指令的使用方式,因為這不是一篇從 0 到 1 的 Docker 教學文。
"這些種種的問題,常常歸咎於開發環境跟部署環境一致。"
應該是要說"不一致"?
漏打了一個字,已修正,謝謝。